import pandas as pd
import pymysql  # 替换为pymysql
from config import DB_CONFIG, EXCEL_FILE_PATH, TABLE_NAME, COLUMN_MAPPING
from pymysql import OperationalError  # pymysql的异常类

def import_excel_to_mysql():
    print(DB_CONFIG)
    try:
        # 连接到 MySQL 数据库（使用pymysql）
        mydb = pymysql.connect(
            host=DB_CONFIG['host'],
            user=DB_CONFIG['user'],
            password=DB_CONFIG['password'],
            database=DB_CONFIG['database'],
            charset='utf8mb4'  # 避免中文乱码
        )
        # 检查连接状态（pymysql用ping()方法）
        if not mydb.open:
            print("连接数据库失败")
            return
        mycursor = mydb.cursor()

        # 读取 Excel 文件
        df = pd.read_excel(EXCEL_FILE_PATH)

        # 根据映射关系重命名 DataFrame 的列名
        df = df.rename(columns=COLUMN_MAPPING)

        # 只选择数据库表中存在的列
        columns = list(COLUMN_MAPPING.values())

        # 生成插入数据的 SQL 语句
        columns_str = ', '.join(columns)
        values_template = ', '.join(['%s'] * len(columns))
        insert_query = f"INSERT INTO {TABLE_NAME} ({columns_str}) VALUES ({values_template})"

        # 遍历 DataFrame 的每一行并插入到数据库中
        for row in df[columns].values.tolist():
            mycursor.execute(insert_query, row)

        # 提交更改
        mydb.commit()
        print("数据导入成功！")

    except OperationalError as err:  # pymysql的数据库异常
        print(f"数据库错误: {err}")
    except Exception as e:
        print(f"发生错误: {e}")
    finally:
        if 'mydb' in locals() and mydb.open:  # 检查连接是否打开
            mycursor.close()
            mydb.close()
            print("数据库连接已关闭。")


if __name__ == "__main__":
    import_excel_to_mysql()
